#建立模型
#对象关系映射（ORM），一个ORM模型与数据库中的一个表对应，每个类属性分别对应表的每个字段，每个实例对象对应表的每条记录
#补全实体类,填充外键信息,对应关系
#下面的那个填充外键的事例我不确定对不对,总感觉哪里怪怪的.可以从网上找有关的知识点看一下再写

#这里柏丽写

from extends import db
# from flask_migrate import Migrate
from datetime import datetime

#用户表
class User(db.Model):
    __tablename__="user"
    uid=db.Column(db.Integer,primary_key=True,autoincrement=True)#用户id，Int类型，主键，自动增长
    username=db.Column(db.String(100),nullable=False, unique=True)#用户名
    password=db.Column(db.String(100),nullable=False)#密码
    userType=db.Column(db.Integer,nullable=False)#用户类型  0管理员 1顾客
    join_time = db.Column(db.DateTime,default=datetime.now)#注册时间

#商品信息表
class Product(db.Model):
    __tablename__ = 'product'
    pid = db.Column(db.Integer, primary_key=True, nullable=False, comment="商品id")
    name = db.Column(db.String(500), nullable=False, comment="商品名称")
    type = db.Column(db.String(64), nullable=False, comment="商品类目id")
    sales = db.Column(db.Integer, nullable=False, comment="销量")
    imageUrl = db.Column(db.String(500), nullable=False, comment="图片URL")
    price = db.Column(db.Float, nullable=False, comment="价格")
    store = db.Column(db.String(500), comment="店铺")

# #购物车
# class Cart(db.Model):
#     __tablename__ = "shopping_cart"
#     uid = db.Column(db.Integer, db.ForeignKey('user.uid'), primary_key=True, nullable=False, comment="用户id")
#     pid = db.Column(db.Integer, db.ForeignKey('product.pid'), primary_key=True, nullable=False, comment="商品id")
#     # 创建一个关联表的对象，第一个参数关联的类的类名， 第二个参数是类里自己类的对象名
#     # 与user关联
#     user = db.relationship('User', back_populates='Cart')
#     # 与product关联
#     product = db.relationship('Product', back_populates='Cart')


# #用户购物行为列表
# class UserBehavior(db.Model):
#     __tablename__ = "userBehavior"
#
#     #添加商品的外键
#     cid=db.Column(db.Integer,db.ForeigKey("product.id"))#添加外键
#     commdity=db.relationship("product",backref="users")#与商品信息表建立联系+backref反向引用,backref自动给商品模型添加一个users的属性
#     #这里的反向引用还有另外一种back_populates,这种还要在连接的表中添加上面那个关联语句,否则商品表中没有user的属性
# #print(Userbehavior.commdity)____两张表联系_____对象化
# #product.users   一个商品对应很多个用户的行为,可以访问一个商品下对应的所有的用户信息
# #比如一个商品的点击的用户有很多,加购它的用户也有很多
#
#
#
# #历史浏览记录
# class History(db.Model):
#     __tablename__ = "history"
#
# #商品标签表
# class Tag_list(db.Model):
#     __tablename__ = "tag_list"
#
# #用户密保表
# class Secret(db.Model):
#     __tablename__ = "secret"
#
# #商品相似度表
# class Similar(db.Model):
#     __tablename__ = "similar"
#
# #商品优先级表
# class Priority_list(db.Model):
#     __tablename__ = "priority_list"

#根据模型创建数据库
#OPM模型映射成表的三步:(字段改变数据库也可以更改)
#点击底部的Terminal,在那里去执行
#1.flask db init:只需执行一次____将项目初始化成一个类似于git这样一个仓库,会多一个migrations的文件夹(迁移脚本)
#2.flask db migrate:识别ORM模型的改变,生成迁移脚本
#3.flask db upgrate:运行迁移脚本,同步到数据库中


#不方便更改
# with.models.app_context():
#     db.create_all()

